package org.club.common.config;

import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;

/**
 * KeyLoader 类用于加载和解析密钥
 */
public class KeyLoader {
    /**
     * 加载公钥
     *
     * @param publicKeyBase64 公钥的 Base64 编码字符串
     * @return 解析后的 PublicKey 对象
     * @throws Exception 如果密钥解析过程中出现错误
     */
    public static PublicKey loadPublicKey(String publicKeyBase64) throws Exception {
        // 将 Base64 编码的公钥字符串解码为字节数组
        byte[] keyBytes = Base64.getDecoder().decode(publicKeyBase64);
        // 使用 X.509 编码规范创建公钥规格对象
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
        // 获取 RSA 密钥工厂对象
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        // 使用密钥工厂从规格对象中生成公钥
        return keyFactory.generatePublic(keySpec);
    }

    /**
     * 加载私钥
     *
     * @param privateKeyBase64 私钥的 Base64 编码字符串
     * @return 解析后的 PrivateKey 对象
     * @throws Exception 如果密钥解析过程中出现错误
     */
    public static PrivateKey loadPrivateKey(String privateKeyBase64) throws Exception {
        // 将 Base64 编码的私钥字符串解码为字节数组
        byte[] keyBytes = Base64.getDecoder().decode(privateKeyBase64);
        // 使用 PKCS#8 编码规范创建私钥规格对象
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
        // 获取 RSA 密钥工厂对象
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        // 使用密钥工厂从规格对象中生成私钥
        return keyFactory.generatePrivate(keySpec);
    }
}
